#ifndef MODEL_H
#define MODEL_H

#include <deque>
#include <string>

class FamilyModel
{
public:
	FamilyModel(); // Constructor

	// Deck Management Functions
	void shuffleDeck();
	void drawCard();  // draw card from the top of the draw deck
	void discard(); // discard a card from a players hand
	void resupplyDeck(); // shuffle discards to create new draw deck
	

	// Turn Management Functions
	void setTurn(int playerid);

	// Player Functions
	void killMobster(int playerid); // player playerid loses a mobster
	void playCard(int playerid, int cardid); // playerid plays card cardid

	// Data
	int numPlayers; // stores number of players in game
	int currentPlayer;  // stores player id of who is on current turn
	std::string cardNames[5]; // name of the cards, name of cardid is cardid-1


};

class Deck
{
public:
	// Deck Functions
	void addCard(int cardid); // adds cardid to the deck
	int sizeOf(); // returns number of cards in the deck

protected:
	int size;
	
};

class LargeDeck : public Deck
{
public:
	void shuffle(); // shuffles the deck
	int drawCard(); // returns cardid of card on top of deck and removes from deck

private:
	std::deque<int> cards;
};

class PlayerHand : public Deck
{
public:
	void listCards();  // lists all cards in the deck
	void removeCard(int cardid); // removes 1 card of cardid from deck
	int isIn(int cardid); // returns location in array of first cardid, -1 if doesn't exist in hand

private:
	int Hand[5]; // Hand has at most 5 cards, stores cardid of cards in the hand, -1 if no card in slot

};

#endif